package com.bootcamp.mall.service.goods;

import com.bootcamp.mall.model.Goods;
import com.bootcamp.mall.model.GoodsType;
import com.bootcamp.mall.model.Spec;
import com.bootcamp.mall.model.bo.goods.GoodsBO;
import com.bootcamp.mall.model.bo.goods.MsgBO;
import com.bootcamp.mall.model.vo.goods.*;

import java.util.List;

/**
 * @program: mall
 * @description:
 * @author: Keyu Li
 * @create: 2021-11-10 14:57
 **/

public interface GoodsService {
    List<GoodsType> getTypes();

    List<GoodsVO> getGoodsByType(Integer typeId);

    boolean addTypes(GoodsType goodsType);

    /**
     * 只删除类目，而该类目下的商品统一转移到 id=1 的未分类默认类目中
     * @param typeId:
     * @return java.lang.Integer 返回 0 表示正常；1 表示未知服务器异常
     * @date 11/11/2021 16:46
     */
    Integer deleteType(Integer typeId);

    /**
     * 将good信息插入到good，规格表
     * @param addGoodsBO:
     * @return java.lang.Integer 返回 0 正常；-1 价格或数量为负数；1 插入数据库时候异常
     * @date 11/10/2021 19:29
     */
    Integer addGoods(GoodsBO addGoodsBO);

    GetGoodsInfoVO getGoodsInfo(int id);

    boolean deleteGoods(Integer id);

    /**
     * 以下两个方法弃用，不会再进入service层进行数据库操作
     * @param addSpec, deleteSpec
     * @return java.lang.Integer
     * @date 11/10/2021 22:41
     */
    Integer addSpec(Spec addSpec);
    Integer deleteSpec(Spec deleteSpecBO);

    /**
     * 可能的错误返回：-1表示price或stock为负数，1表示spec同名错误，500表示其他异常，0表示正常操作
     * @param updateGoodsBO: 
     * @return java.lang.Integer
     * @date 11/11/2021 15:10
     */
    Integer updateGoods(GoodsBO updateGoodsBO);

    /**
     * 展示全部 未回复/已回复 的留言
     * @param state: 0 表示已经回复； 1 表示未回复
     * @return com.bootcamp.mall.model.vo.goods.MsgBO
     * @date 11/11/2021 23:06
     */
    List<MsgVO> showMsg(Integer state);


    Integer replyMsg(MsgBO msgBO);

    List<GoodsVO> searchGoods(Goods goods);

    /**
     * 功能同 getGoodsInfo 完全相同，但是可恶的responseVO略有不同
     * @param id:
     * @return com.bootcamp.mall.model.vo.goods.GoodsVO
     * @date 11/12/2021 19:49
     */
    GoodsVO getGoodsInfoFront(Integer id);

    /**
     * 查询message表，再联合查询user表获取
     * @param id: 
     * @return java.util.List<com.bootcamp.mall.model.vo.goods.GoodsMsgVO>   
     * @date 11/12/2021 20:14
     */
    List<GoodsMsgVO> getGoodsMsg(Integer id);

    /**
     * 将回复信息添加到message表中，需要联合查询user表；返回 -1 表示插入异常；返回 0 表示插入成功。
     * @param msgBO: 
     * @return java.lang.Integer
     * @date 11/12/2021 21:05
     */
    Integer addGoodsMsg(MsgBO msgBO);

    /**
     * 查表并计算rate
     * @param goodsId: 
     * @return com.bootcamp.mall.model.vo.goods.GetCommentVO
     * @date 11/13/2021 17:03
     */
    GetCommentVO getGoodsComment(Integer goodsId);
}
